package ar.uade.fain.ai.tpo.model;

import java.util.List;

import ar.uade.fain.ai.tpo.model.exceptions.SinStockException;

public class Comida {

	private Long id;
	private String nombre;
	private Categoria categoria;
	private Receta receta;
	private Seccion seccion;

	public Comida() {
		super();
	}

	public Comida(Long id, String nombre, Categoria categoria, Receta receta,
			Seccion seccion) {
		super();
		this.id = id;
		this.nombre = nombre;
		this.categoria = categoria;
		this.receta = receta;
		this.seccion = seccion;
	}



	public Double getPrecioBase() {
		List<Ingrediente> ingredientes = getReceta().getIngredientes();
		Double precio = 0D;
		for (Ingrediente i : ingredientes){
			Double cantidad = i.getCantidad();
			Double costo = i.getProducto().getCosto();
			if (cantidad == null || costo == null){
				throw new IllegalStateException("Faltan datos de ingredientes para"
						+ "calculo de precio");
			}
			precio += costo *cantidad;
		}
		return precio;
	}

	public void preparar(int cantidad) throws SinStockException {
		this.getSeccion().preparar(this, cantidad);
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public Receta getReceta() {
		return receta;
	}

	public void setReceta(Receta receta) {
		this.receta = receta;
	}

	public Seccion getSeccion() {
		return seccion;
	}

	public void setSeccion(Seccion seccion) {
		this.seccion = seccion;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Comida other = (Comida) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

}